#include "stm32f10x.h"
#include "usart.h"
#include "gpio.h"
#include <stdio.h>
#include "nt35510.h"
#include "fsmc.h"
#include "gt9147.h"
#include "timer.h"
#include "nvic.h"
#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lv_examples.h"

static void System_Initialization(void)
{
  Delay_Init();
  NVIC_Initialization(NVIC_PriorityGroup_4);
  STD_FSMC_Initialization();
  STD_USART_Initialization();
  STD_GPIO_Initialization();
  NT35510_Initialization();
  TIM_Initialization();
  GT9147_Init();
  lv_init();
  lv_port_disp_init();
  lv_port_indev_init();
}

int main(void)
{
  System_Initialization();
  // ctp_test();
  lv_demo_benchmark();
  // NT35510_Color_Fill(1,1,200,100,sky_animation_mask);
  while (1)
	{
    GT9147_Scan(0);
    lv_task_handler();
	}
}

/**
 * 功能：us级别延时
 * 参数：Us：要延时的时间
 * 返回值：None
 */
void Delay_Us(uint32_t Us)
{
  SysTick->LOAD = 9 * Us; //计9次为1us，xus则重装载值要*9
  SysTick->VAL = 0;        //计数器清零之后会立即将LOAD值装载到VAL寄存器中并且开始计数
  while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); //等待90减到0才释放这个函数(判断计数完成位是否为1)
}
 
/**
 * 功能：ms级别延时
 * 参数：Ms：要延时的时间
 * 返回值：None
 */
void Delay_Ms(uint32_t Ms)
{
	SysTick->LOAD = 9000; //计9次为1us，9000次为1ms
  SysTick->VAL = 0;     //计数器清零之后会立即将LOAD值装载到VAL寄存器中并且开始计数

  //从9000减到0重复执行xms次就得到可x ms
  while (Ms--)
  {
      // 判断是否从9000减到0
      while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); //等待单次计数完成
  }
  SysTick->LOAD = 9000 * Ms; //计9次为1us，xus则重装载值要*9
}

/**
 * 功能：初始化Systick定时器
 * 参数：None
 * 返回值：None
 */
 
/*此函数定义完成之后定时器的溢出周期(计数周期)就是1us
	72MHz / 8 = 9Hz(1/9 us) 
	1/9 us * 9 = 1us
*/
void Delay_Init(void)
{
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置时钟源8分频
  SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;            //使能定时器溢出中断
  SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;             //开定时器让定时器可以开始计数
  SysTick->LOAD = 9;     
}